package com.draby.fantasy.dataTypes;

import com.draby.fantasy.exceptions.ParamsLengthNotMatchException;

/**
 * 矩形地图
 */
public class RectangleMap extends Map {
    /**
     * 地图的高(单位：格)
     * 执行初始化后只允许获取不允许设置
     */
    private int height;
    /**
     * 地图的宽(单位：格)
     * 执行初始化后只允许获取不允许设置
     */
    private int width;

    public int getHeight() {
        return height;
    }

    public int getWidth() {
        return width;
    }

    /**
     * 初始化矩形地图，带两个参数
     * 第一个参数为地图的高(行)，第二个参数为地图的宽(列)
     * @return true: 初始化成功，否则返回 false
     * @throws ParamsLengthNotMatchException 参数长度不匹配异常
     */
    @Override
    public boolean initMap(int... values) throws ParamsLengthNotMatchException {
        if (values.length != 2) {
            throw new ParamsLengthNotMatchException("矩形地图需要且只需要定义地图的 高度 和 宽度！");
        }
        // 设置 高 和 宽
        height = values[0];
        width = values[1];
        // 根据 高 和 宽 的大小创建地图大小
        Block[][] maze = new Block[height][width];
        // 矩形地图全为未访问格子，无需设置不可到达格子
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                maze[i][j] = new Block(i, j);
            }
        }
        // 保存地图
        setMaze(maze);
        return true;
    }
}
